package p43_FactoryBean;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * 工厂bean
 * 特点:
 *    被工厂bean创建的产品，注入过程，前初始化过程，初始化过程，aware回调过程和销毁过程都不会执行
 *    仅仅只会执行后初始化过程，也就是说产品可以被代理
 *    从容器中根据名字拿取工厂bean时，拿到的是工厂bean创建的产品
 *    FactoryBean本身作为一个bean，它的生命周期各个阶段还是会被执行的
 */
@ComponentScan
public class _FactoryBean {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(_FactoryBean.class);
        //直接获取Bean1
        Bean1 bean1 = context.getBean(Bean1.class);
        System.out.println(bean1);
        //获取的名称是factoryBean，但是实际得到的类型的Bean1
        Bean1 bean = context.getBean("factoryBean", Bean1.class);
        System.out.println(bean);
        //获取工厂本身
        MyFactoryBean factoryBean1  = context.getBean("&factoryBean", MyFactoryBean.class);
        System.out.println(factoryBean1);

        context.close();
    }
}
